package chapter11_api.string;

import org.junit.Test;

/**
 * ClassName: StringDemo
 * Package: chapter11_api.string
 * Description:
 *
 * String的不可变性：
 * 1.当对字符串变量重新赋值时，需要重新指定一个字符串常量的位置进行赋值，不能在原有的位置上修改。
 * 2.当对现有的字符进行拼接操作时，需要重新开辟空间保存拼接后的字符串，不能在原有的位置修改
 * 3.当调用字符串的replace()替换某个现有的字符时，需要重新开辟空间保存替换后的字符串，不能在原有的位置修改
 *
 * @Author SherryAn
 * @Create 2025/8/13 20:23
 */
public class StringDemo {

    @Test
    public void test1(){
        String s1="Hello!";//字面量的定义方式
        String s2="Hello!";
        System.out.println(s1==s2);//true
//此时s1和s2指向的是同一个地址
        s2="World!";
        System.out.println(s1==s2);//false
    }
    @Test
    public void test2(){
        String s1="Hello!";
        String s2="Hello!";
        s2 += "World!";

        System.out.println(s1);//Hello!
        System.out.println(s2);//Hello!World!
    }

    @Test
    public void test3(){
        String s1="Hello!";
        String s2="Hello!";

        String s3 = s2.replace('l','x');
        System.out.println(s3);//Hexxo!
    }

    @Test
    public void test4(){
        String s1="Hello!";
        String s2="Hello!";

        String s3=new String("Hello!");
        String s4=new String("Hello!");

        System.out.println(s1==s2);// true
        System.out.println(s3==s4);// false
        System.out.println(s1==s3);// false
        System.out.println(s2==s4);// false

        System.out.println(s1.equals(s2));// true
    }

    //测试String的连接符'+'
    @Test
    public void test5(){
        String s1="Hello";
        String s2="World";
        String s3="HelloWorld";
        String s7="Hello"+"World";
        String s4=s1+s2;
        String s5=s1+"World";
        String s6="Hello"+s2;
        System.out.println(s3==s4);// false
        System.out.println(s3==s7);// true
        System.out.println(s3==s5);// false
        System.out.println(s3==s6);// false
        System.out.println(s4==s5);// false
        System.out.println(s4==s6);// false
        System.out.println(s5==s6);// false
        System.out.println();
        //intern()的作用：返回字符串常量池中，字面量的地址
        String s8=s5.intern();
        System.out.println(s3==s8);// true

        final String s9="Hello";//变量变常量
        String s10=s9+"World";
        System.out.println(s3==s10);// true
//使用concat()测试
        String s11="Hello";
        String s12="World";
        String s13=s11.concat(s12);
        System.out.println(s3==s13);// false,因为concat()使用的是new


    }




}
